package ubo.master1.jeupoker.ia;

import java.util.List;
import java.util.Set;

import ubo.master1.jeupoker.gui.LaCart;
import ubo.master1.jeupoker.ia.Joueur;

/**
 * Dans ce niveau le robot evalue les cartes en mains avec la fonction
 * evaluate holecardes et determine une strategie d'actions a suivre
 *
  */
public class NiveauMoyen extends Robot {

    private LaCart[] cards;
    
    @Override
    public void messageReceived(String message) {
        
    }

    
    @Override
    public void joinedTable(int bigBlind, List<Joueur> players) {
        
    }

    
    @Override
    public void handStarted(Joueur dealer) {
        
    }

    
    @Override
    public void actorRotated(Joueur actor) {
        
    }

    
    @Override
    public void boardUpdated(List<LaCart> cards, int bet, int pot) {
       
    }

    
    @Override
    public void playerUpdated(Joueur player) {
        this.cards = player.getCards();
    }

    
    @Override
    public void playerActed(Joueur player) {
        
    }
    
    
    @Override
    public LesActions act(Set<LesActions> actions) {
        // si les cartes en mains verifient au moins un critere
        if (evaluateHoleCards()>=1){
        if (actions.contains(LesActions.CHECK)) {
            return LesActions.CHECK;
        } else if (actions.contains(LesActions.BET)){return LesActions.BET;}
        else if (actions.contains(LesActions.CALL)){return LesActions.CALL;}
        else{  return LesActions.FOLD; } // plus d'autres alternatives
            
        } 
           // jeu comportant trop de risques
            return LesActions.FOLD;  
    
    }
       
        

    // evaluer les cartes en mains(selon des criteres)
    public int evaluateHoleCards() {
        int value=0;
        
        if ((cards.length) <2) {//verifier que le joueur a au moins 2 cartes
           
        }
        else{ 
           
        int rank1 = cards[0].getNumeroCarte();
        int suit1 = cards[0].getCouleurCarte();
        int rank2 = cards[1].getNumeroCarte();
        int suit2 = cards[1].getCouleurCarte();
        int highRank = Math.max(rank1, rank2);
        int lowRank = Math.min(rank1, rank2);
        
        int distance = highRank - lowRank;
        
        boolean isSuited = (suit1 == suit2);
        boolean isPair = (rank1 == rank2);
        boolean isSequential = (distance == 1);
        
        
        // critere: au dessus de la moyenne en valeurs
        if((highRank + lowRank) >12){ value++;}
        // critere: meme couleurs
          if (isSuited) {
            value++;
        }  // critere:une suite
          if (isSequential) {
            value++;
        }
         // critere:une paire
        if (isPair) {value=value+2;}
            
        } 
         // retourner la valeur calculé des criteres
         return value;   
    
}
 
    
} 
